import hashlib
from fuzzywuzzy import fuzz
import random
import string

class Comfuc:

    @staticmethod
    def generate_hash(home: str, away: str, prediction: str, random: str) -> str:
        raw = f"{home}|{away}|{prediction}|{random}|"
        return hashlib.sha256(raw.encode()).hexdigest()


    @staticmethod
    def generate_random_letters(length: int = 4) -> str:
        """
        生成指定长度的随机大写字母字符串。

        参数:
        length (int): 生成的字符串长度，默认为 4

        返回:
        str: 随机大写字母字符串
        """
        return ''.join(random.choices(string.ascii_uppercase, k=length))

    @staticmethod
    def invert_sign(number):
        """
             正数变负数，负数变+，0不变
             """
        result = -number
        if result > 0:
            return f"+{result}"
        elif result == 0 and type(number) == float:  # 检查输入是否为浮点数且结果为0
            return "0.0"
        else:
            return str(result)

    @staticmethod
    def sign(number):
        """
             正数前面是+，0不变
             """
        if number > 0:
            return f"+{number}"
        elif number == 0 and type(number) == float:  # 检查输入是否为浮点数且结果为0
            return "0.0"
        else:
            return str(number)

    @staticmethod
    def find_min_diff_array(data):
        """
        从字典中找出差额最小的数组，并返回对应的 key 和 value。

        参数:
        data (dict): 包含数组的字典，格式为 {key: [value1, value2, ...]}

        返回:
        tuple: (key, value)，其中 value 是差额最小的数组
        """
        # 计算每个数组的差额
        diffs = {key: abs(arr[0] - arr[1]) for key, arr in data.items()}

        # 找到差额最小的 key
        min_key = min(diffs, key=diffs.get)

        # 返回对应的 key 和 value
        return min_key, data[min_key]

    @staticmethod
    def similarity(match1,match2):
        """
                计算相似度。数值0-100，我们按照80计算,返回true
        """
        return fuzz.ratio(match1, match2)>70

    @staticmethod
    def calculate_return_rate(odds_big, odds_small):
        """
        计算大球和小球赔率的返还率。

        参数:
        odds_big (float): 大球赔率
        odds_small (float): 小球赔率

        返回:
        float: 返还率（百分比）
        """
        # 计算隐含概率
        prob_big = 1 / odds_big
        prob_small = 1 / odds_small

        # 总隐含概率
        total_prob = prob_big + prob_small

        # 返还率
        return_rate = (1 / total_prob) * 100

        return return_rate

    @staticmethod
    def calculate_hash(content1, content2):
        """
        计算两个内容的哈希值并比较是否相同。

        参数:
        content1 (str): 第一个内容
        content2 (str): 第二个内容

        返回:
        bool: 如果哈希值相同返回 True，否则返回 False
        """
        # 计算第一个内容的哈希值
        hash1 = hashlib.sha256(content1.encode("utf-8")).hexdigest()

        # 计算第二个内容的哈希值
        hash2 = hashlib.sha256(content2.encode("utf-8")).hexdigest()

        # 比较哈希值
        return hash1 == hash2